const { query } = require("./db");

/**
 * Token管理工具类
 */
class TokenManager {
  /**
   * 保存token到数据库
   * @param {number} userId - 用户ID
   * @param {string} token - token字符串
   * @returns {Promise<boolean>} - 保存结果
   */
  static async saveToken(userId, token) {
    try {
      // 计算过期时间（当前时间+60分钟）
      const expiredAt = new Date(Date.now() + 60 * 60 * 1000);

      // 先删除该用户的旧token
      await query("DELETE FROM user_tokens WHERE user_id = ?", [userId]);

      // 保存新token
      const sql = `
        INSERT INTO user_tokens (user_id, token, expired_at) 
        VALUES (?, ?, ?)
      `;
      await query(sql, [userId, token, expiredAt]);

      return true;
    } catch (error) {
      console.error("保存token失败:", error);
      return false;
    }
  }

  /**
   * 验证token是否有效
   * @param {string} token - token字符串
   * @returns {Promise<object|null>} - token信息
   */
  static async verifyToken(token) {
    try {
      const sql = `
        SELECT t.*, u.username 
        FROM user_tokens t
        JOIN userinfo u ON t.user_id = u.id
        WHERE t.token = ? AND t.expired_at > NOW()
      `;
      const tokens = await query(sql, [token]);
      return tokens.length > 0 ? tokens[0] : null;
    } catch (error) {
      console.error("验证token失败:", error);
      return null;
    }
  }

  /**
   * 清除用户的token
   * @param {string} token - 要清除的token
   * @returns {Promise<boolean>} - 清除结果
   */
  static async removeToken(token) {
    try {
      const sql = "DELETE FROM user_tokens WHERE token = ?";
      const result = await query(sql, [token]);
      return result.affectedRows > 0;
    } catch (error) {
      console.error("清除token失败:", error);
      return false;
    }
  }

  /**
   * 清除指定用户的所有token
   * @param {number} userId - 用户ID
   * @returns {Promise<boolean>} - 清除结果
   */
  static async removeUserTokens(userId) {
    try {
      const sql = "DELETE FROM user_tokens WHERE user_id = ?";
      const result = await query(sql, [userId]);
      return result.affectedRows > 0;
    } catch (error) {
      console.error("清除用户token失败:", error);
      return false;
    }
  }
}

module.exports = TokenManager;
